﻿#pragma once
#include <vtkm/cont/Algorithm.h>
#include <vtkm/cont/ArrayHandle.h>        //数组类的头文件 头文件是路径
#include <vtkm/worklet/WorkletMapField.h> //算子封装头文件
//#include <vtkm/Matrix.h>
#include <cusp/blas/blas.h>

//template<typename ArrayType1,typename ArrayType2,typename Arraytype3 >
class SparseMatrix
{
public:
  SparseMatrix(Id N) { _rows.Allocate(N), _cols.Allocate(N), _values.Allocate(N); }


  void fill(const std::vector<Id>& rows, const std::vector<Id>& cols, const std::vector<Real>& vals)
  {
    _rows = vtkm::cont::make_ArrayHandle<Id>(rows);         //赋值
    _cols = vtkm::cont::make_ArrayHandle<Id>(cols);
    _values = vtkm::cont::make_ArrayHandle<Real>(vals);
  }

private:
  vtkm::cont::ArrayHandle<Id> _rows,
    _cols; //“vtkm::cont::ArrayHandle<int>+数组名”表示该数组存储的元素类型。

  vtkm::cont::ArrayHandle<Real> _values;
};
